package com.cencat.common.annotation;

import java.lang.annotation.*;

/**
 * 数据脱敏注解
 * 标记在字段上，进行数据脱敏处理
 * 
 * @author cencat
 * @since 2024-01-01
 */
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Desensitize {
    
    /**
     * 脱敏类型
     * @return 脱敏类型
     */
    Type type() default Type.CUSTOM;
    
    /**
     * 自定义脱敏规则（正则表达式）
     * @return 脱敏规则
     */
    String rule() default "";
    
    /**
     * 替换字符
     * @return 替换字符
     */
    String replacement() default "*";
    
    /**
     * 脱敏类型枚举
     */
    enum Type {
        /** 自定义脱敏 */
        CUSTOM,
        /** 手机号脱敏：138****1234 */
        MOBILE,
        /** 邮箱脱敏：abc***@example.com */
        EMAIL,
        /** 身份证脱敏：123456********1234 */
        ID_CARD,
        /** 姓名脱敏：张*三 */
        NAME,
        /** 银行卡脱敏：1234 **** **** 5678 */
        BANK_CARD,
        /** 地址脱敏：北京市***区 */
        ADDRESS,
        /** 密码脱敏：****** */
        PASSWORD
    }
}